package com.demo.java.OD151_200.OD186;

import java.util.*;
import java.util.stream.Collectors;

/**
 * @author bug菌
 * @Source 公众号：猿圈奇妙屋
 * @des： 【热点网络统计】问题
 * @url： https://blog.csdn.net/weixin_43970743/article/details/145874967
 */
public class OdMain {
    // 创建一个 HashMap 来记录每个 URL 的访问次数
    private static final Map<String, Integer> urlCountMap = new HashMap<>();

    public static void main(String[] args) {
        // 创建 Scanner 对象来读取输入
        try (Scanner scanner = new Scanner(System.in)) {
            // 循环读取每一行输入
            while (scanner.hasNext()) {
                String line = scanner.nextLine().trim();

                // 判断当前输入是一个数字还是 URL
                try {
                    int n = Integer.parseInt(line);  // 如果是数字
                    printTopUrls(n);  // 调用方法输出前 n 个最常访问的 URL
                } catch (NumberFormatException e) {
                    // 如果输入是一个 URL
                    urlCountMap.put(line, urlCountMap.getOrDefault(line, 0) + 1);
                }
            }
        }
    }

    // 输出前 n 个访问次数最多的 URL
    private static void printTopUrls(int n) {
        // 将 URL 按照访问次数降序排序，如果访问次数相同则按字母顺序升序排序
        List<Map.Entry<String, Integer>> sortedUrls = urlCountMap.entrySet()
                .stream()
                .sorted((entry1, entry2) -> {
                    // 先按访问次数降序排序，访问次数相同则按 URL 升序排序
                    int countComparison = entry2.getValue().compareTo(entry1.getValue());
                    if (countComparison == 0) {
                        return entry1.getKey().compareTo(entry2.getKey());
                    }
                    return countComparison;
                })
                .collect(Collectors.toList());

        // 输出前 n 个 URL
        for (int i = 0; i < n && i < sortedUrls.size(); i++) {
            System.out.print(sortedUrls.get(i).getKey());
            // 输出时，避免最后一个 URL 后有逗号
            if (i != n - 1 && i < sortedUrls.size() - 1) {
                System.out.print(",");
            }
        }
        System.out.println();
    }
}
